package com.mmy.service.impl.sys;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mmy.controller.UtilConstants;
import com.mmy.dao.sys.TSysOrgRepository;
import com.mmy.dao.sys.VSysOrgRepository;
import com.mmy.dao.sys.VSysUserRepository;
import com.mmy.domain.sys.TSysOrg;
import com.mmy.domain.sys.TSysUser;
import com.mmy.domain.sys.VSysOrg;
import com.mmy.domain.sys.VSysUser;
import com.mmy.service.ServiceCommon;
import com.mmy.service.sys.SysOrgService;;

@Service
public class SysOrgServiceImpl /* implements SysOrgService */ {
	@Autowired
	TSysOrgRepository tSysOrgRepository;
	@Autowired
	VSysUserRepository vSysUserRepository;
	@Autowired
	VSysOrgRepository vSysOrgRepository;
	@Autowired
	ServiceCommon common;
	
	//自创建的旅行社审核
	/*这个有错误,会清空org*/
	public void check(TSysOrg org) {
		
		tSysOrgRepository.save(org);
	}	
	
	
	/**
	 * 查询所有公司信息
	 *
	 * @author 创建人 hanxl 整理
	 * @date 创建日期 2020.10.29
	 * 
	 *       用处：1、 用处:注册时搜索所有公司名称 SysUserController中 index函数
	 * 
	 *       2、后台显示投标信息时查询
	 * 
	 *       创建旅行社时用到
	 */
	public List<TSysOrg> findAll() {
		return tSysOrgRepository.findAll();
	}

	/**
	 * 查询该OrgID的信息
	 *
	 * @author 创建人 hanxl 整理
	 * @date 创建日期 2020.10.29
	 * 
	 */
	public TSysOrg findByOrgID(int iOrgID) {
		return tSysOrgRepository.findByOrgID(iOrgID);
	}

	/**
	 * 函数功能说明：后台旅行社显示页面
	 *
	 * @param 参数说明 vPlaneOrg
	 * @return 返回值说明 jsp页面
	 * @author 创建人 hanxl 修改人hanxl
	 * @date 创建日期 2020.11.18 修改时间2021.03.16
	 */
	public List<VSysOrg> findALL() {
		List<VSysOrg> lstSysOrg = vSysOrgRepository.findAll();
		return lstSysOrg;
	}
	
	/**
	 * 函数功能说明：后台待审核旅行社显示页面
	 *
	 * @param 参数说明 vPlaneOrg
	 * @return 返回值说明 jsp页面
	 * @author 创建人 liys
	 * @date 创建日期 2021.06.07
	 */
	public List<VSysOrg> findCheck() {
		List<VSysOrg> lstSysOrg = vSysOrgRepository.findCheck();
		return lstSysOrg;
	}
	/**
	 * 后台旅行社信息管理中显示自己公司及下级公司信息如果为管理员显示全部公司信息 异步加载表格
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @date 创建日期 2020.11.19 修改时间2021.02.22
	 */
	public List<VSysOrg> findByOrgID(TSysUser sessionSysUser, String strOrgName, String strUpOrgID, String strZoneID,
			int startIndex, int count) {
		if (strOrgName == null)
			strOrgName = "";
		if (strUpOrgID == null)
			strUpOrgID = "";
		if (strZoneID == null)
			strZoneID = "";
		int iOrgID = sessionSysUser.getOrgID();
		List<VSysOrg> lstSysOrg = new ArrayList<VSysOrg>();
		// 如果为超级管理员
		if (sessionSysUser.getUserID() == 0) {
			lstSysOrg = vSysOrgRepository.findSearchALL(strOrgName, strUpOrgID, strZoneID, startIndex, count);
		} else {
			// 如果非超级管理员 搜索条件为公司名称和区域
			lstSysOrg = vSysOrgRepository.findSearchByOrgID(iOrgID, strOrgName, strZoneID, startIndex, count);
		}
		return lstSysOrg;
	}

	/**
	 * 后台非超级管理员登录 只显示自己公司和下级所属公司
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @date 创建日期 2020.11.19 修改时间2021.03.17
	 */
	public int queryOrgCount(TSysUser sessionSysUser, String strOrgName, String strUpOrgID, String strZoneID) {
		if (strOrgName == null)
			strOrgName = "";
		if (strUpOrgID == null)
			strUpOrgID = "";
		if (strZoneID == null)
			strZoneID = "";
		int iOrgID = sessionSysUser.getOrgID();
		int count = 0;
		if (sessionSysUser.getUserID() == 0) {
			count = vSysOrgRepository.countALL(strOrgName, strUpOrgID, strZoneID);
		} else {
			count = vSysOrgRepository.countByOrgID(iOrgID, strOrgName, strZoneID);
		}
		return count;
	}
	
	public int queryCheckCount() {
		
		int count = vSysOrgRepository.queryCheckCount();
		return count;
	}
	
	/**
	 * 查询该OrgID的信息以及上级所属公司为该ID的公司信息
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.03.17
	 * 
	 */
	public List<TSysOrg> findBySysOrgID(int orgID) {
		return tSysOrgRepository.findBySysOrgID(orgID);
	}

	/**
	 * 函数功能说明： 创建旅行社信息 提交
	 * 
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.03.17
	 *
	 */
	public void createSysOrg(TSysOrg tSysOrg, TSysUser sessionSysUser) {
		tSysOrg.setOrgID(common.createBaseCode(UtilConstants.TableName.T_SYS_ORG));
		tSysOrg.setCreateDate(new Date());
		tSysOrg.setCreator(sessionSysUser.getUserName());
		tSysOrgRepository.save(tSysOrg.getOrgID());
		tSysOrgRepository.save(tSysOrg);
	}
	
	/**
	 * 函数功能说明： 用户自行创建旅行社
	 * 
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @author 创建人 liys
	 * @date 创建日期 2021.06.06
	 *
	 */
	public int createSysOrgSelf(TSysOrg tSysOrg) {
		tSysOrg.setOrgID(common.createBaseCode(UtilConstants.TableName.T_SYS_ORG));
		tSysOrg.setCreateDate(new Date());
		tSysOrgRepository.save(tSysOrg.getOrgID());
		tSysOrgRepository.save(tSysOrg);
		
		return tSysOrg.getOrgID();
	}
	
	/**
	 * 获得最大编号
	 * 
	 * @return 返回值说明 最大ID
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.10
	 */

	public int getMaxOrgID() {
		// 流水号
		Object objCode = tSysOrgRepository.getMaxOrgID();
		int iID = 0;
		if (objCode != null) {
			iID = Integer.parseInt(objCode.toString());
		}
		return iID;
	}

	/**
	 * 函数功能说明： 修改旅行社信息 提交
	 *
	 * @param 参数说明 tSysOrg
	 * @return 返回值说明 jsp页面
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.03.17
	 */
	public void updateSysOrg(TSysOrg tSysOrg, TSysUser sessionSysUser) {

		TSysOrg dtSysOrg = tSysOrgRepository.findByOrgID(tSysOrg.getOrgID());
		dtSysOrg.setOrgName(tSysOrg.getOrgName());
		dtSysOrg.setUpOrgID(tSysOrg.getUpOrgID());
		dtSysOrg.setContact(tSysOrg.getContact());
		dtSysOrg.setMobile(tSysOrg.getMobile());
		dtSysOrg.setTel(tSysOrg.getTel());
		dtSysOrg.setFax(tSysOrg.getFax());
		dtSysOrg.setAddress(tSysOrg.getAddress());
		dtSysOrg.setZoneID(tSysOrg.getZoneID());
		dtSysOrg.setMemo(tSysOrg.getMemo());

		dtSysOrg.setModifyDate(new Date());

		dtSysOrg.setReviser(sessionSysUser.getUserName());

		tSysOrgRepository.save(dtSysOrg);
	}

	public Map<String, Object> deleteChecked(String[] striOrgIDs) {
		List<Integer> iOrgIDs = new ArrayList<>();
		List<String> strSuccOrgNames = new ArrayList<>();
		List<String> strFailOrgNames = new ArrayList<>();
		for (String striOrgID : striOrgIDs) {
			// 需要判断每一个要删除的旅行社 是否有员工或者是否为其他公司的上级所属公司 均为否 则可以删除
			int iOrgID = Integer.parseInt(striOrgID);
			List<TSysOrg> lstSysOrg = tSysOrgRepository.getByUpOrgID(iOrgID);
			List<VSysUser> lstSysUser = vSysUserRepository.getByOrgID(iOrgID);
			if (lstSysOrg.size() == 0 || lstSysUser.size() == 0) {
				iOrgIDs.add(iOrgID);
				// 获取该ID的公司名称
				String strOrgName = tSysOrgRepository.findByOrgID(iOrgID).getOrgName();
				strSuccOrgNames.add(strOrgName);
			} else {
				// 获取该ID的公司名称
				String strOrgName = tSysOrgRepository.findByOrgID(iOrgID).getOrgName();
				strFailOrgNames.add(strOrgName);
			}

		}
		tSysOrgRepository.deleteChecked(iOrgIDs);
		Map<String, Object> data = new HashMap<>();
		data.put("successOrg", strSuccOrgNames);
		data.put("failOrg", strFailOrgNames);
		return data;
	}

}
